# -*- coding: utf-8 -*-
import os
import shutil
import glob
import smtplib
import commands
from email.Message import Message

from PyQt4.QtCore import QString
from PyQt4.QtGui import QMessageBox

from config.preferences import SYSTEM, SRC_PATH, DADOS_DB

try:
    _fromUtf8 = QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s


class ActionsUploadDb():

    def __init__(self, db):
        """
            Construtor da classe.
        """
        self.db = db



    def copiarDadosParaDiretorioDbTmp(self):
        """
            Metodo que executa a copia dos dados que estao no diretorio
            /tmp/dados , para o diretorio /dados/tmp no servidor.
        """
        a = 0
        caminhoDadosTmp = (SRC_PATH + "/tmp/dados/")
        os.chdir(caminhoDadosTmp)
        diretorios = os.listdir(caminhoDadosTmp)
        
        for dir in diretorios:
        
            if dir == ".svn":
                pass
                
            else:
                _caminhoDadosTmp = caminhoDadosTmp
                caminhoDiretorio = (_caminhoDadosTmp + dir)
                os.chdir(caminhoDiretorio)
                _dados = os.listdir(caminhoDiretorio)
                dados = len(_dados)
                
                if dados > 1:
                    a = 1
                    for _caminhoDadosTmp in glob.glob(
                                                      caminhoDiretorio +
                                                      "/*.jpg"):
                        shutil.move(
                        _caminhoDadosTmp,(
                        DADOS_DB + "tmp/" + dir))
                
                else:
                    pass
        
        if a == 0:
            QMessageBox.warning(
                            None,
                            " TSM ",
                            _fromUtf8(
                            "Não há arquivos!!!"))
                            
        else:
            self.inserirDadosDb()
        os.chdir(SRC_PATH)



    def inserirDadosDb(self):
        """
            Metodo para inserir os dados que estao no diretorio /dados/tmp
            no banco de dados vna.sqlite.
        """
        dados = []
        os.chdir(DADOS_DB + "tmp/")
        caminhoDados = (DADOS_DB + "tmp/")
        diretorios = os.listdir(caminhoDados)
        
        for dir in diretorios:
            
            if dir == ".svn":
                pass
                
            else:
                _caminhoDados = caminhoDados
                caminhoDiretorio = (_caminhoDados + dir + "/")
                os.chdir(caminhoDiretorio)
                arquivos = os.listdir(caminhoDiretorio)
                
                for arq in arquivos:
                    
                    if arq == ".svn":
                        pass
                    else:
                        status = "Producao"
                        num_pedido = 0
                        _plot = (DADOS_DB + "dataBase/" + dir + "/" + arq)
                        plot = str(_plot)
                        nomeArquivo = arq.split("_")
                        
                        id_produto_entrada = self.db.getIdFromProduto(dir)
                        _date = nomeArquivo[0]
                        year = _date[:4]
                        month = _date[4:6]
                        day = _date[6:]
                        date = (year + "-" + month + "-" + day)
                        num_serie = nomeArquivo[1]
                        ordProd = nomeArquivo[2]
                        ordProd = ordProd.split(".")
                        ord_producao = ordProd[0]
                        if not dados.count(ord_producao):
                            dados.append(ord_producao)
                        self.db.adicionarEntrada(
                                                 id_produto_entrada,
                                                 num_serie, ord_producao,
                                                 num_pedido, plot, date, status)
        os.chdir(SRC_PATH)
        self.dadosCopiados = dados
        self.copiarDadosParaDiretorioDb()


    def copiarDadosParaDiretorioDb(self):
        """
            Metodo para copia dos arquivos do diretorio temporario no servidos
            para o diretorio /dados/dataBase/.
        """
        caminhoDadosDbTmp = (DADOS_DB + "tmp/")
        os.chdir(caminhoDadosDbTmp)
        diretorios = os.listdir(caminhoDadosDbTmp)
        
        for dir in diretorios:
            
            if dir == ".svn":
                pass
            else:
                
                _caminhoDadosTmp = caminhoDadosDbTmp
                caminhoDiretorio = (_caminhoDadosTmp + dir)
                os.chdir(caminhoDiretorio)
                for _caminhoDadosTmp in glob.glob(
                                                  caminhoDiretorio + "/*.jpg"):
                    shutil.move(
                                _caminhoDadosTmp,(
                                DADOS_DB + "dataBase/" + dir))
        
        QMessageBox.information(
                                None,
                                " TSM ",
                                _fromUtf8(
                                "Banco de Dados Atualizado!!!"))
        
        self.enviarEmail(self.dadosCopiados)
        self.uploadDb()



    def uploadDb(self):
        """
        
        """
        os.chdir(SRC_PATH + "/tmp/dataBase")
        shutil.copyfile("produtos_cadastrados.sqlite", "backup.sqlite")
        shutil.move("backup.sqlite", "/mnt/vna/dataBase/backup")



    def enviarEmail(self, dados):
        """
        
        """
        dados = str(dados)
        de = 'fberton@tsm.com.br'
        para = ['fbberton@gmail.com']
        subject = "Banco de Dados Atualizado. %s" %dados
        headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" %(
                                                                de,
                                                                para,
                                                                subject)
        d = ("Foram adicionados ao banco de dados os produtos das "
             "seguintes ordens de producao: %s" %dados)
        message = headers + d
        try:
           smtpObj = smtplib.SMTP('mail.tsm.com.br', 25)
           smtpObj.starttls()
           smtpObj.sendmail(de, para, message)
        except SMTPException:
           pass
